#!/bin/bash

# Claude Code 重置脚本
# 功能：将Claude Code配置从智谱GLM-4.6重置回官方Anthropic服务

set -euo pipefail

# 颜色定义用于输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() { echo -e "${BLUE}🔹 $*${NC}"; }
log_success() { echo -e "${GREEN}✅ $*${NC}"; }
log_warning() { echo -e "${YELLOW}⚠️ $*${NC}"; }
log_error() { echo -e "${RED}❌ $*${NC}"; }

# 主重置函数
reset_claude_config() {
    log_info "开始重置Claude Code配置..."
    
    # 1. 备份现有配置（安全措施）
    backup_config() {
        local backup_dir="$HOME/.claude_backup_$(date +%Y%m%d_%H%M%S)"
        mkdir -p "$backup_dir"
        
        if [ -d "$HOME/.claude" ]; then
            cp -r "$HOME/.claude" "$backup_dir/" 2>/dev/null || true
            log_success "配置已备份至: $backup_dir"
        fi
    }
    
    # 2. 删除Claude配置目录
    remove_claude_dir() {
        if [ -d "$HOME/.claude" ]; then
            log_warning "即将删除Claude配置目录: $HOME/.claude"
            read -p "确认继续? (y/N): " confirm
            if [[ "$confirm" =~ ^[Yy]$ ]]; then
                rm -rf "$HOME/.claude"
                log_success "已删除Claude配置目录"
            else
                log_info "已跳过删除配置目录"
            fi
        else
            log_info "未找到Claude配置目录，无需删除"
        fi
    }
    
    # 3. 清理环境变量（针对当前shell和配置文件）
    clean_environment_variables() {
        local env_vars=("ANTHROPIC_BASE_URL" "ANTHROPIC_API_KEY")
        local shell_files=("$HOME/.bashrc" "$HOME/.zshrc" "$HOME/.bash_profile")
        
        for var in "${env_vars[@]}"; do
            # 取消设置当前shell中的变量
            unset "$var" 2>/dev/null || true
        done
        
        # 从shell配置文件中注释掉相关设置
        for file in "${shell_files[@]}"; do
            if [ -f "$file" ]; then
                if grep -q "ANTHROPIC_BASE_URL.*bigmodel\|ANTHROPIC_BASE_URL.*claudeyy" "$file" 2>/dev/null; then
                    log_info "清理环境变量设置从: $file"
                    # 创建备份并注释相关行
                    cp "$file" "$file.bak"
                    sed -i.bak -E 's/(export[[:space:]]+ANTHROPIC_(BASE_URL|API_KEY)=.*)/# \1  # Commented by Claude reset script/' "$file"
                    log_success "已更新: $file"
                fi
            fi
        done
    }
    
    # 4. 检查并清理可能的全局配置文件
    clean_global_config() {
        local global_configs=("$HOME/.claude.json" "/etc/claude/config.json")
        
        for config in "${global_configs[@]}"; do
            if [ -f "$config" ]; then
                log_warning "发现全局配置文件: $config"
                read -p "是否删除? (y/N): " confirm
                if [[ "$confirm" =~ ^[Yy]$ ]]; then
                    rm -f "$config"
                    log_success "已删除: $config"
                fi
            fi
        done
    }
    
    # 5. 验证重置结果
    verify_reset() {
        log_info "验证重置结果..."
        
        # 检查配置目录是否已删除
        if [ ! -d "$HOME/.claude" ]; then
            log_success "✓ Claude配置目录已清理"
        else
            log_warning "⚠ Claude配置目录仍然存在"
        fi
        
        # 检查环境变量
        if [ -z "${ANTHROPIC_BASE_URL:-}" ]; then
            log_success "✓ 环境变量已清理"
        else
            log_warning "⚠ ANTHROPIC_BASE_URL仍然设置: $ANTHROPIC_BASE_URL"
        fi
        
        # 测试Claude命令
        if command -v claude &> /dev/null; then
            log_info "测试Claude命令..."
            if claude --version &> /dev/null; then
                log_success "✓ Claude命令行工具正常工作"
                
                # 尝试启动Claude（会触发重新配置）
                log_info "启动Claude进行重新配置..."
                echo "请按Ctrl+C退出Claude，然后重新运行进行官方配置"
                timeout 5s claude || true
            else
                log_error "✗ Claude命令存在但无法正常运行"
            fi
        else
            log_error "✗ 未找到Claude命令，请确保已正确安装"
        fi
    }
    
    # 6. 显示后续步骤
    show_next_steps() {
        echo
        log_success "重置完成！接下来需要："
        echo
        echo "1. 重新启动终端会话以使环境变量更改生效"
        echo "2. 运行 'claude' 命令启动重新配置"
        echo "3. 使用您的官方Anthropic账户进行认证"
        echo "4. 确保网络环境可以访问 Anthropic 官方API (api.anthropic.com)"
        echo
        log_warning "重要：重置后首次运行Claude时会要求重新登录和配置"
    }
    
    # 执行重置流程
    log_info "步骤 1/6: 备份现有配置"
    backup_config
    
    log_info "步骤 2/6: 删除配置目录"
    remove_claude_dir
    
    log_info "步骤 3/6: 清理环境变量"
    clean_environment_variables
    
    log_info "步骤 4/6: 清理全局配置"
    clean_global_config
    
    log_info "步骤 5/6: 验证重置结果"
    verify_reset
    
    log_info "步骤 6/6: 显示后续步骤"
    show_next_steps
}

# 系统检测和兼容性检查
check_system_compatibility() {
    local system=$(uname -s)
    log_info "检测到操作系统: $system"
    
    case "$system" in
        Darwin|Linux)
            log_success "✓ 支持的操作系统"
            ;;
        *)
            log_error "不支持的操作系统: $system"
            log_error "此脚本仅支持 macOS 和 Linux 系统"
            exit 1
            ;;
    esac
    
    # 检查必要的工具
    local required_tools=("bash" "sed" "grep")
    for tool in "${required_tools[@]}"; do
        if ! command -v "$tool" &> /dev/null; then
            log_error "缺少必要工具: $tool"
            exit 1
        fi
    done
    log_success "✓ 所有必要工具可用"
}

# 主函数
main() {
    echo
    log_info "=== Claude Code 配置重置工具 ==="
    echo
    
    # 系统检查
    check_system_compatibility
    
    # 用户确认
    log_warning "此操作将："
    echo "• 删除所有Claude Code配置"
    echo "• 清理相关环境变量"
    echo "• 需要重新配置Claude Code"
    echo
    
    read -p "确定要继续吗? (y/N): " main_confirm
    if [[ ! "$main_confirm" =~ ^[Yy]$ ]]; then
        log_info "操作已取消"
        exit 0
    fi
    
    # 执行重置
    reset_claude_config
}

# 脚本入口
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
    main "$@"
fi
